package Servicios;

import java.util.List;
import java.util.Vector;

import Negocio.Viaje;
import Negocio.ViajeInterSucursal;
import Negocio.ViajePuertaAPuerta;
//import Negocio.Cliente;
//import Negocio.ClienteParticular;
//import Negocio.CuentaCorriente;
import Negocio.EmpresaRegular;
import Persistencia.IRepository;
import Persistencia.QueryParameter;
import Persistencia.Repository;
import Persistencia.RepositoryException;


public class ServicioViajes {
	private IRepository<Viaje> repositorioViajes;
	private static ServicioViajes instance = null;
	
	private ServicioViajes() {
		this.repositorioViajes = new Repository<Viaje>();
	}
	
	public static ServicioViajes getInstance() {
		if (instance == null) {
			instance = new ServicioViajes();
		}
		return instance;
	}
	
	/**
	 * @return List<Cliente> clientes
	 * @throws ServiceException
	 */
	public List<Viaje> getViajes() throws ServiceException {
		List<Viaje> viajes;
		
		try {
			viajes = this.repositorioViajes.getAll(Viaje.class);
		} catch (RepositoryException e) {
			throw new ServiceException(e);
		}	
		
		return viajes;
	}
	
	/**
	 * @throws ServiceException
	 */
	public void guardarOActualizar(Viaje viaje) throws ServiceException {
		try {
			this.repositorioViajes.saveOrUpdate((Viaje)viaje);
		} catch (RepositoryException e) {
			throw new ServiceException(e);
		}
	}

	
	public Viaje getViaje(int viajeId) throws RepositoryException {
		String queryExpression = "from ViajeInterSucursal c where c.viajeId = :viajeId";
		QueryParameter parameter = new QueryParameter("viajeId", viajeId);
		Viaje viaje = this.repositorioViajes.get(queryExpression, parameter);
		
		return viaje;
	}
	
	public Boolean existeViaje(int viajeId) throws RepositoryException {
		return this.getViaje(viajeId) != null;
	}

	/**
	 * @throws RepositoryException
	 */
	public void eliminarViaje(Viaje viaje) throws RepositoryException {
		this.repositorioViajes.delete(viaje);
	}

}
